package com.ll.cpu;

/**
 * @author 刘龙
 * @version 1.0
 * 演示通过继承Thread 类 创建线程
 */
public class Thread01 {
    public static void main(String[] args) throws InterruptedException {
        // 创建 Cat 对象, 可以当做线程使用
        Cat cat = new Cat();
        //启动线程
        /**
         * public synchronized void start(){
         *          start0();
         * }
         */
        cat.start();

        // run 方法就是一个普通的方法,没有真正的启动一个线程,就会把run方法执行完毕才继续向下执行
//        cat.run();
        // 说明: 当main线程启动一个子线程 Thread-2, 主线程不会阻塞
        // 不会等start()执行完毕在执行,主线程会继续执行
        System.out.println("主线程继续执行" + Thread.currentThread().getName());
        for (int i = 0; i < 20; i++) {
            System.out.println("主线程i=" + i);
            // 让主线程休眠
            Thread.sleep(1000);
        }
    }
}

/**
 * 当一个类继承了Thread类,该类就可以当做线程使用
 * 我们会重写run方法,写上自己的业务代码
 * run Thread类 实现了 Runnable接口的run方法
 */
class Cat extends Thread {
    private int count = 0;

    /**
     * 重写run方法,写上自己的业务逻辑
     */
    @Override
    public void run() {
        while (true) {
            // 该线程每隔一秒,输出"fire"
            System.out.println("fire" + (++count) + ", 线程名称: " + Thread.currentThread().getName());
            // 让该线程休眠1秒
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            if (count == 50) {
                // 当count到50,退出while,线程也退出
                break;
            }
        }
    }
}

